package com.sale.system.service.impl;

import com.alibaba.fastjson.JSONArray;
import com.sale.system.domain.SysOfConfig;
import com.sale.system.domain.SysOfValue;
import com.sale.system.domain.dto.OfConfigDto;
import com.sale.system.domain.dto.SysTheDropDto;
import com.sale.system.mapper.SysOfConfigMapper;
import com.sale.system.service.ISysOfConfigService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * @Description 编码生成变量实现类
 * @Param sysOfConfig 实体类
 * @return 结果
 * @Date 22-11-16
 * @Author hl
 **/
@RequiredArgsConstructor
@Service
public class SysOfConfigServiceImpl implements ISysOfConfigService {

    @Resource
    private final SysOfConfigMapper sysOfConfigMapper;


    /**
     * 查询编码变量
     */
    @Override
    public OfConfigDto selectOfConfigList() {
        List<SysOfConfig> list=sysOfConfigMapper.selectOfConfigList();
        OfConfigDto ofConfigDTO = new OfConfigDto();
        List<SysOfConfig> list1= new ArrayList<SysOfConfig>();
        List<SysOfConfig> list2= new ArrayList<SysOfConfig>();
        List<SysOfConfig> list3= new ArrayList<SysOfConfig>();
        List<SysOfConfig> list4= new ArrayList<SysOfConfig>();
        for (SysOfConfig sysOfConfig:
        list) {
            String lei = sysOfConfig.getConfigType();
            if(lei.equals("flowingWater")){
                list1.add(sysOfConfig);
            }else if(lei.equals("year")){
                list2.add(sysOfConfig);
            }else if(lei.equals("month")){
                list3.add(sysOfConfig);
            }else{
                list4.add(sysOfConfig);
            }
        }
        ofConfigDTO.setFlowingWater(list1);
        ofConfigDTO.setYear(list2);
        ofConfigDTO.setMonth(list3);
        ofConfigDTO.setDay(list4);
        return ofConfigDTO;
    }

    /**
     * 查询单个编码变量
     */
    @Override
    public List<SysOfValue> selectOfConfigById(long configId) {
        return sysOfConfigMapper.selectOfConfigById(configId);
    }


    /**
     * 新增编码变量
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int sysOfConfigAdd(SysOfConfig sysOfConfig) throws Exception{
        int c = sysOfConfigMapper.sysOfConfigAdd(sysOfConfig);
        int op =0;
        if(c>0){
           String kl = sysOfConfig.getBarCode();
           long idS = sysOfConfig.getConfigId();
           List<SysOfValue> list= JSONArray.parseArray(kl, SysOfValue.class);
            for (SysOfValue va:
            list) {
                va.setConfigId(idS);
            }
            op = sysOfConfigMapper.sysOfValueAdd(list);
        }else{
            throw new SQLException("抛出异常");
        }
        return op;
    }

    /**
     * 删除编码变量
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int deleteOfConfigById(long configId) throws Exception{
        int kl = sysOfConfigMapper.deleteOfConfigById(configId);
        if(kl>0){
            kl = sysOfConfigMapper.deleteOfValueById(configId);
        }
        if(kl==0){
            throw new SQLException("抛出异常");
        }
        return kl;
    }

    /**
     * 修改编码变量
     */
    @Override
    public int updateOfConfigEdit(SysOfConfig sysOfConfig) throws Exception {
        int kp = sysOfConfigMapper.updateOfConfigEdit(sysOfConfig);
        if(kp>0){
            long cv = sysOfConfig.getConfigId();
            kp = sysOfConfigMapper.deleteOfValueById(cv);
            String kl = sysOfConfig.getBarCode();
            List<SysOfValue> list= JSONArray.parseArray(kl, SysOfValue.class);
            for (SysOfValue va:
                    list) {
                va.setConfigId(cv);
            }
            kp = sysOfConfigMapper.sysOfValueAdd(list);
        }
        if(kp==0){
            throw new SQLException("抛出异常");
        }
        return kp;
    }

    /**
     * 编码变量下拉
     */
    @Override
    public  List<SysTheDropDto> dropVariablesThe(int configType) {
        List<SysTheDropDto> list = new ArrayList<SysTheDropDto>();
        if(configType==1){//日期变量
             list = sysOfConfigMapper.dropVariablesThe();
        }else{
            list =sysOfConfigMapper.dropVariablesThe2();

        }
        return list;
    }
}
